package licode.unisop.realm.client.api;

import licode.unisop.provider.info.*;
import licode.unisop.provider.vo.*;

import java.util.List;

/**
 * 定义用户查询接口
 *
 * @author licode
 */
public interface SiUserQueryService {
    /**
     * 根据领域和用户查找用户的账号信息
     * @param idFind 查找条件
     * @return 用户账号信息
     */
    SiAccountSet findAccount(UserIdInfo idFind);

    /**
     * 根据领域和用户查找用户的授权信息
     * @param idFind 查找条件
     * @return 用户授权信息
     */
    SiIdentitySet findIdentity(UserIdInfo idFind);

    /**
     * 根据账号信息查找用户ID
     * @param account 账号信息
     * @return 用户信息
     */
    String lookupUserId(SiAccount account);

    /**
     * 根据账号信息找到用户
     * @param account 账号信息
     * @return 用户信息
     */
    SiUser lookupUserByAccount(SiAccount account);

    /**
     * 根据用户标识查询用户信息
     * @param info 用户ID信息
     * @return 用户信息
     */
    SiUser lookupUserById(UserIdInfo info);

    SiUserBrief lookupUserBriefById(UserIdInfo idInfo);
    SiUserBrief lookupUserBriefByAccount(SiAccount idInfo);

    SiUserGroup lookupUserGroup(UserGroupLookupIn req);

    /**
     * 根据用户ID集合查询用户列表
     * @param userIn 查询条件
     * @return 用户列表信息
     */
    List<SiUser> queryUsers(SiQueryUserIn userIn);

    /**
     * 分页查找用户信息
     * @param req 查找条件
     * @return 用户信息
     */
    SiPageResult<SiUser> findPage(UserPageInfo req);

    /**
     * 找到分配给平台的用户分组信息
     * @param req 请求信息
     * @return 用户分组信息
     */
    List<SiUserGroup> findRealmGroupsOfPlatform(UserGroupQueryIn req);

    /**
     * 分页查找用户分组信息
     * @param req 查询信息
     * @return 用户分组信息
     */
    SiPageResult<SiUserGroup> findUserGroupPage(UserGroupQueryPageIn req);

    /**
     * 查询除了指定领域外已经分配领域的平台列表信息
     * @return 分配的平台信息
     */
    List<SiRealmPlatform> findRealPlatformOther(SiRealmPlatformOtherIn req);

    /**
     * 根据领域ID和分组信息查询对应的平台列表
     * @param req 请求信息
     * @return 分配信息
     */
    SiPageResult<SiRealmPlatform> findRealPlatform(SiRealmAssignPlatPageIn req);
}
